The WebAppTestCase deploys an OSGi Web Application Bundle (WAB). Similar to HTTP Service Example it registers a servlet and resources with the WebApp container. This is done through a standard web.xml descriptor.
<web-app xmlns="http://java.sun.com/xml/ns/javaee" ... version="2.5"> <display-name>WebApp Sample</display-name> <servlet> <servlet-name>servlet</servlet-name> <servlet-class>org.jboss.test.osgi.example.webapp.bundle.EndpointServlet</servlet-class> <init-param> <param-name>initProp</param-name> <param-value>SomeValue</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>servlet</servlet-name> <url-pattern>/servlet</url-pattern> </servlet-mapping> </web-app>
The associated OSGi manifest looks like this.
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName: example-webapp Bundle-ClassPath: .,WEB-INF/classes Web-ContextPath: example-webapp Import-Package: javax.servlet,javax.servlet.http,...
The test verifies that we can access the servlet and some resources.
public void testServletAccess() throws Exception { // Provide WebApp support WebAppSupport.provideWebappSupport(context, bundle); // Start the test bundle bundle.start(); String line = getHttpResponse("/example-webapp/servlet?test=plain", 5000); assertEquals("Hello from Servlet", line); }
This test uses the OSGi Repository functionality to provision the runtime with the required support functionality like this
WebAppSupport.provideWebappSupport(context, bundle);
To enable OSGi Web Application support in AS7 you would configure these capabilities
<capability name="org.ops4j.pax.web:pax-web-jetty-bundle:1.1.2"/> <capability name="org.ops4j.pax.web:pax-web-jsp:1.1.2"/> <capability name="org.ops4j.pax.web:pax-web-extender-war:1.1.2"/>